#+title: GNU Emacs II: Gestión de paquetes y modo Org
#+author: dlmayhem
#+email: dlmayhem@riseup.net
#+date: 2023-12-05
#+language: es
#+options: num:nil toc:nil ':t

* Materiales

- Material del curso :: https://notabug.org/dlmayhem/emacs-hss.git
- Mi config personal :: https://notabug.org/dlmayhem/terror-emacs.git

* Contenidos

- Dired
- ELPA/MELPA
- Modo Org
  
* Repaso

| ATAJO   | ACCIÓN              | COMANDO                    |
|---------+---------------------+----------------------------|
| C-x C-f | Crear/abrir archivo | find-file                  |
| C-x C-s | Guardar archivo     | save-buffer                |
| C-x C-w | Guardar como        | write-file                 |
| C-x C-c | Cerrar Emacs        | save-buffers-kill-terminal |

* El editor de directorios

| ATAJO     | ACCIÓN                                | COMANDO                   |
|-----------+---------------------------------------+---------------------------|
| C-x d RET | Iniciar dired                         | dired                     |
| n         | Avanzar al archivo siguiente          | dired-next-line           |
| p         | Retroceder al archivo anterior        | dired-previous-line       |
| +         | Crear nuevo directorio                | dired-create-directory    |
| i         | Mostrar contenido en la misma ventana | dired-maybe-insert-subdir |
| C         | Copiar archivo a                      | dired-do-copy             |
| R         | Renombrar/mover archivo a             | dired-do-rename           |
| D         | Borrar archivo                        | dired-do-delete           |
| d         | Seleccionar archivo para borrar       | dired-flag-file-deletion  |
| x         | Ejecutar borrado de selección         | dired-do-flagged-delete   |
| M         | chmod                                 | dired-do-chmod            |
| O         | chown                                 | dired-do-chown            |

* Gestión de paquetes

** Los repositorios =elpa=, =melpa= y =nongnu=

#+begin_src elisp

  (require 'package)
  (setq package-archives '(("melpa" . "https://melpa.org/packages/")
                           ("nongnu" . "https://elpa.nongnu.org/nongnu/")
                           ("elpa" . "https://elpa.gnu.org/packages/")))
  (package-initialize)
  (unless package-archive-contents
    (package-refresh-contents))

#+end_src

** El framework =use-package=

#+begin_src elisp

  (unless (package-installed-p 'use-package)
    (package-install 'use-package))
  (require 'use-package)
  (setq use-package-always-ensure t)
  
#+end_src

* Si conocemos el nombre del paquete

- Instalar el paquete =ejemplo= ::
  =M-x package-install ejemplo=

- Desinstalar el paquete =ejemplo= ::
  =M-x package-delete ejemplo=

- Eliminar dependencias innecesarias ::
  =M-x package-autoremove=

* Si queremos ver la lista de paquetes

- Ver los paquetes disponibles ::
  =M-x list-packages=

- Búsqueda incremental ::
| ATAJO | ACCIÓN         | COMANDO          |
|-------+----------------+------------------|
| C-s   | Hacia adelante | isearch-forward  |
| C-r   | Hacia atrás    | isearch-backward |

- Seleccionar para instalación ::
  =i=

- Ejecutar instalación ::
  =x=

* El framework =use-package=

** La instrucción normal

#+begin_src elisp

  (require ejemplo)
  
#+end_src

** Con =use-package=

#+begin_src elisp

  (use-package ejemplo
    :config
    instrucción-uno
    instrucción-dos)

#+end_src

* Ejemplo de uso

#+begin_src elisp

  (use-package magit
    :bind ("C-x g" . magit-status))
  
#+end_src

* Ya que estamos...

** Embark

#+begin_src elisp

  (use-package embark
    :ensure t
    :bind (("C-." . embark-act)
           ("C-;" . embark-dwim)
           ("C-h B" . embark-bindings))
    :init
    (setq prefix-help-command #'embark-prefix-help-command)
    :config
    (add-to-list 'display-buffer-alist
                 '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
                   nil
                   (window-parameters (mode-line-format . none)))))

#+end_src

** Corfu

#+begin_src elisp

  (use-package corfu
    :custom
    (corfu-auto t)
    (corfu-quit-no-match t)
    (corfu-separator ?\s)
    :init
    (global-corfu-mode))

  (use-package corfu-terminal
    :config
    (unless (display-graphic-p)
      (corfu-terminal-mode +1)))

#+end_src

** PDF Tools

#+begin_src elisp

  (use-package pdf-tools
    :defer t)

  (pdf-loader-install)

  (use-package pdf-view-restore
    :after pdf-tools
    :config
    (add-hook 'pdf-view-mode-hook 'pdf-view-restore-mode))

#+end_src

** Elfeed

#+begin_src elisp

  (use-package elfeed
    :no-require t
    :bind ("C-x w" . elfeed))

  (use-package elfeed-org
    :ensure t
    :after elfeed 
    :config
    (elfeed-org)
    (setq rmh-elfeed-org-files (list "~/.emacs.d/elfeed.org")))
  
#+end_src

** AUCTeX

#+begin_src elisp

  (use-package latex
    :ensure auctex
    :defer t
    :custom
    (TeX-source-correlate-mode t)
    (TeX-source-correlate-start-server t)
    :config
    (setq TeX-view-program-selection '((output-pdf "PDF Tools")))
    (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer))
  
#+end_src

** Markdown Mode

#+begin_src elisp

  (use-package markdown-mode
    :ensure t
    :commands (markdown-mode gfm-mode)
    :mode (("README\\.md\\'" . gfm-mode)
           ("\\.md\\'" . markdown-mode)
           ("\\.markdown\\'" . markdown-mode)))

#+end_src

* Modos mayores y menores

** Mayores

- Configuraciones predeterminadas de Emacs.
- Incluyen sus propias características y atajos.
- Existen modos mayores para C, Python, LaTeX, Java, Prolog, etc.
- Los modos mayores son incompatibles entre si.

** Menores

- Proporcionan ciertas utilidades específicas.
- Son compatibles entre si y con los modos mayores.

* Modo Org

- Modo mayor de Emacs.
- Entorno de cómputo multilenguaje para programación literaria y reproducibilidad.
- Creado por Carsten Dominik.
- Software libre bajo GPLv3.

* Configuración básica

#+begin_src elisp

  (use-package org
    :commands (org-capture org-agenda)
    :bind (("C-c l" . org-store-link)
           ("C-c a" . org-agenda)
           ("C-c c" . org-capture))
    :config
    (setq org-agenda-files '("~/.emacs.d/agenda.org")
          org-ellipsis " ▾"
          org-footnote-auto-adjust t
          org-return-follows-link t
          org-log-done 'time
          org-capture-bookmark nil
          org-html-validation-link nil
          org-startup-indented t
          org-startup-folded nil))

#+end_src

* Recursos

** Lectura recomendada

- (2012) Schulte, E., Davison, D., Dye, T., & Dominik, C., [[https://www.jstatsoft.org/article/view/v046i03][A Multi-Language Computing Environment for Literate Programming and Reproducible Research]].
  
** Documentación

- [[https://orgmode.org/org.html][The Org Manual]], documentación oficial.
- [[https://orgmode.org/orgguide.html][Org Mode Compact Guide]], guía "rápida".
- [[https://www.gnu.org/software/emacs/refcards/pdf/orgcard.pdf][Org-Mode Reference Card]], tarjeta de referencia.
- [[https://orgmode.org/worg/][Worg]], documentación creada por la comunidad.
- [[https://orgmode.org/worg/org-contrib/babel/][Babel: Active Code in Org]]
- [[https://orgmode.org/worg/org-contrib/babel/languages/index.html][Babel: Language Support]]

** En YouTube

- Harry Schwartz, [[https://yewtu.be/watch?v=SzA2YODtgK4][Getting Started With Org Mode]].
- Prot, [[https://yewtu.be/watch?v=e9Ucb1JHUfQ][Emacs: Org mode basics]].
- DT, [[https://yewtu.be/watch?v=34zODp_lhqg][Org Mode Basics In Doom Emacs]].
- System Crafters, [[https://yewtu.be/watch?v=VcgjTEa0kU4][Emacs From Scratch #5 - Org Mode Basics]].

* Paquetes utilizados

- [[https://github.com/jwiegley/use-package][use-package]]
- [[https://magit.vc/][Magit]]
- [[https://github.com/oantolin/embark][Embark]]
- [[https://github.com/minad/corfu][Corfu]]
- [[https://github.com/vedang/pdf-tools][PDF Tools]]
- [[https://github.com/007kevin/pdf-view-restore/][pdf-view-restore]]
- [[https://github.com/skeeto/elfeed][Elfeed]]
- [[https://github.com/remyhonig/elfeed-org][elfeed-org]]
- [[https://www.gnu.org/software/auctex/][AUCTeX]]
- [[https://jblevins.org/projects/markdown-mode/][Markdown Mode]]
  
* Próxima clase

- Org Agenda.
- Manejo de citas bibliográficas.
- Presentaciones en Emacs.

*¡Gracias por asistir!*
